package algo.utilitaire;

import algo.graphe.Graphe;

/**
 * Classe qui permet de tester les temps d'executions des algorithmes sur un graphe
 * @author <a href="mailto:christian.dramsy@gmail.com>DRAMSY Christian</a>
 */
public class UtilitairePerformance {

    /**
     * Execute et mesure le temps d'execution de l'algorithme de Dijkstra version Tableau
     * @param graphe
     * @param nbExecution 
     */
    public static void executeDijkstraTableau(Graphe graphe) {

        System.out.println("==================================================================");
        System.out.println("TEST SUR : Graphe de " + graphe.getOrdre() + " noeuds");
        System.out.println("==================================================================\n");

        System.out.print("Execution de Dijkstra tableau ...");
        //  temps de debut d'execution d'un algorithme
        long start = System.currentTimeMillis();

        UtilitaireDijkstra.executeDijkstraTableau(graphe, false);
        //  temps de fin d'execution d'un algorithme
        long end = System.currentTimeMillis();
        System.out.println(" [" + (end - start) + "ms]");
    }

    /**
     * Execute et mesure le temps d'execution de l'algorithme de Dijkstra version Tas
     * @param graphe
     * @param nbExecution 
     */
    public static void executeDijkstraTas(Graphe graphe) {

        System.out.println("==================================================================");
        System.out.println("TEST SUR : Graphe de " + graphe.getOrdre() + " noeuds");
        System.out.println("==================================================================\n");

        System.out.print("Execution de Dijkstra tas ...");
        //  temps de debut d'execution d'un algorithme
        long start = System.currentTimeMillis();

        UtilitaireDijkstra.executeDijkstraTas(graphe, false);
        //  temps de fin d'execution d'un algorithme
        long end = System.currentTimeMillis();
        System.out.println(" [" + (end - start) + "ms]");
    }

    /**
     * Execute et mesure le temps d'execution de l'algorithme de Dijkstra version Liste
     * @param graphe
     * @param nbExecution 
     */
    public static void executeDijkstraListe(Graphe graphe) {

        System.out.println("==================================================================");
        System.out.println("TEST SUR : Graphe de " + graphe.getOrdre() + " noeuds");
        System.out.println("==================================================================\n");

        System.out.print("Execution de Dijkstra liste ...");
        //  temps de debut d'execution d'un algorithme
        long start = System.currentTimeMillis();

        UtilitaireDijkstra.executeDijkstraListe(graphe, false);
        //  temps de fin d'execution d'un algorithme
        long end = System.currentTimeMillis();
        System.out.println(" [" + (end - start) + "ms]");
    }

    /**
     * Execute et mesure le temps d'execution de l'algorithme de Moore version Tableau
     * @param graphe
     * @param nbExecution 
     */
    public static void executeMooreTableau(Graphe graphe) {

        System.out.println("==================================================================");
        System.out.println("TEST SUR : Graphe de " + graphe.getOrdre() + " noeuds");
        System.out.println("==================================================================\n");

        System.out.print("Execution de Moore tableau ...");
        //  temps de debut d'execution d'un algorithme
        long start = System.currentTimeMillis();

        UtilitaireMoore.executeMooreTableau(graphe, false);
        //  temps de fin d'execution d'un algorithme
        long end = System.currentTimeMillis();
        System.out.println(" [" + (end - start) + "ms]");
    }

    /**
     * Execute et mesure le temps d'execution de l'algorithme de Moore version Tas
     * @param graphe
     * @param nbExecution 
     */
    public static void executeMooreTas(Graphe graphe) {

        System.out.println("==================================================================");
        System.out.println("TEST SUR : Graphe de " + graphe.getOrdre() + " noeuds");
        System.out.println("==================================================================\n");

        System.out.print("Execution de Moore tas ...");
        //  temps de debut d'execution d'un algorithme
        long start = System.currentTimeMillis();

        UtilitaireMoore.executeMooreTas(graphe, false);
        //  temps de fin d'execution d'un algorithme
        long end = System.currentTimeMillis();
        System.out.println(" [" + (end - start) + "ms]");
    }

    /**
     * Execute et mesure le temps d'execution de l'algorithme de Moore version Liste
     * @param graphe
     * @param nbExecution 
     */
    public static void executeMooreListe(Graphe graphe) {

        System.out.println("==================================================================");
        System.out.println("TEST SUR : Graphe de " + graphe.getOrdre() + " noeuds");
        System.out.println("==================================================================\n");

        System.out.print("Execution de Moore liste ...");
        //  temps de debut d'execution d'un algorithme
        long start = System.currentTimeMillis();

        UtilitaireMoore.executeMooreListe(graphe, false);
        //  temps de fin d'execution d'un algorithme
        long end = System.currentTimeMillis();
        System.out.println(" [" + (end - start) + "ms]");
    }
}
